MidTerm - Classification

Author

Cristina Chavez

Published

January 9, 2027

Introducción

Este modelo tiene como objetivo determinar cuando me cuesta hacer n casas de tipo proyecto vivienda pública en Ecuador.

La base de datos contiene 61 filas, esta fue modificada para tener el número de casas de tipo vivienda 1 y el costo de realización de ese conjunto de casas.

Importar Bibliotecas

Code
## Bibliotecas importadas

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, learning_curve
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np
import ipywidgets as widgets
from IPython.display import display
  1. Cargar la base de datos
Code
casas = pd.read_excel("Reg.xlsx")
casas.head()
CT NV
0 502804.81 29
1 854082.54 51
2 1125092.22 65
3 410532.20 23
4 335996.20 19
  1. Dividir en entreamiento y prueba
Code
X = casas[['NV']]          # columna con el número de viviendas
y = casas[['CT']]     # columna con el costo total    

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  1. Entrenar el modelo
Code
modelo = LinearRegression()
modelo.fit(X_train, y_train)
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
  1. Predicciones.
Code
y_pred = modelo.predict(X_test)
  1. Evaluación del modelo.
Code
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f"Mean Squared Error (MSE): {mse:.2f}")
print(f"R² Score: {r2:.4f}")
Mean Squared Error (MSE): 536069253.75
R² Score: 0.9943
  1. Comparación de valores reales y predichos
Code
plt.figure()
plt.scatter(y_test, y_pred)
plt.xlabel("Valores reales")
plt.ylabel("Valores predichos")
plt.title("Comparación entre valores reales y predichos")
plt.grid(True)
plt.show()

  1. Visualización de la curva de aprendizaje
Code
train_sizes, train_scores, test_scores = learning_curve(modelo, X, y, cv=5, scoring='r2')

train_mean = np.mean(train_scores, axis=1)
test_mean = np.mean(test_scores, axis=1)

plt.figure()
plt.plot(train_sizes, train_mean, label="Entrenamiento")
plt.plot(train_sizes, test_mean, label="Validación")
plt.xlabel("Tamaño del conjunto de entrenamiento")
plt.ylabel("R² Score")
plt.title("Curva de aprendizaje")
plt.legend()
plt.grid(True)
plt.show()

  1. Qué paso con el \(R^2\)? El \(R^2\) nos dice que este modelo tiene un buen ajuste lineal de datos.

  2. Cómo pruebo con un dato nuevo.

Cuánto dinero necesito para hacer N casas?

Code
n_input = widgets.FloatText(
    value=None,
    description='Casas:',
    disabled=False
)

# Botón para ejecutar la predicción
button = widgets.Button(description="Predecir")

# Etiqueta para mostrar resultado
output = widgets.Output()

def predecir_costo(b):
    with output:
        output.clear_output()
        n = n_input.value
        pred = modelo.predict([[n]])[0]
        print(f"Para construir {n:.0f} casas, se necesitan aproximadamente ${pred:,.2f}")

button.on_click(predecir_costo)

display(n_input, button, output)